#include <stdio.h>

/*alumnos:
- Oscar Flores
-
-
*/

/*declaracion de la estructura con los datos a utilizar*/
struct nodo {
	float rut;
	char nombre[10];
	char apelPat[10];
	char apelMat[10];
	int edad;
	char cargo[10];
	struct nodo *siguiente;
};

/*declaracion de punteros tipo trabajador a usar*/
struct nodo *inicio = NULL; // puntero inicial de la lista
struct nodo *aux, *centro, *busca; // puntero auxiliar
struct nodo *nuevo; // para crear nodos

/*funcion encargada del menu y retorna la opcion digitada*/
int menu(){
	int opc;
	printf("**\n\nElija la opcion a realizar:\n\n");
	printf("1: Ingresar nuevos elementos.\n");
	printf("2: Eliminar elemento segun clave.\n");
	printf("3: Imprimir los registros.\n");
	printf("4: Encontrar el elemento central de la lista.\n");
	printf("5: Encontrar a un trabajador por medio del Rut.\n");
	printf("0: Salir.\n\n");
	printf("\tOpcion digitada: ");
	scanf("%d",&opc);
	return(opc);
}

int main(int argc, char *argv[]) {
	/*variables tipo entero a utilizar*/
	int opcion, tope, limite, i,contador=0;
	float ingRut;
	
	/*cantidad relativa de registros con los que se quiere trabajar*/
	printf("**\nIngrese el limite maximo que tendra el registro de elementos: ");
 	scanf("%d",&limite);
	
	/*se copiara el limite digitado en una segunda variable llamada "tope",*/
	/*la cual permitira identificar si se ha excedido la cantidad de registros*/
	tope = limite; 
  	limite = 0;	
		
	do{
		/*invocacion del menu*/
		opcion = menu();
		
		switch(opcion){
			case 1:
				if(limite < tope){
					/*limpia el buffer de memoria*/
					fflush(stdin);
					/*insertaremos el primer nodo*/
					nuevo = malloc(sizeof(struct nodo)); // creamos el nuevo nodo reservando memoria
					/*los registros de las personas*/
					printf("Registro de nuevos trabajadores\n");
					printf("RUT: ");
					scanf("%f",&nuevo->rut);
					fflush(stdin);
					printf("Nombre: ");
					scanf("%s",nuevo->nombre);
					fflush(stdin);
					printf("Apellido Paterno: ");
					scanf("%s",nuevo->apelPat);
					fflush(stdin);
					printf("Apellido Materno: ");
					scanf("%s",nuevo->apelMat);
					fflush(stdin);
					printf("Edad: ");
					scanf("%d",&nuevo->edad);
					fflush(stdin);
					printf("Cargo: ");
					scanf("%s",nuevo->cargo);
					fflush(stdin);
					nuevo->siguiente = inicio; // como es el primero
					inicio = nuevo; // el puntero inicial apunta al primer nodo
					limite++; /*por cada registro ingresado, el limite aumentara en "1".*/
					printf("\n\tNota: Se ha ingresado correctamente el registro\n");
				}else{
					printf("\n#### Se ha excedido la cantidad permitida de registros\n");
				}	
				break;
			case 2:
					/*elimina un registro a travez de la clave (RUT)*/
					/*variable auxiliar que almacenara el rut del trabajador a eliminar*/
					printf("Ingrese el RUT del trabajador a eliminar\n");
					scanf("%f",&ingRut);
					aux = inicio;
					while (aux->rut != ingRut) {
						aux = aux->siguiente;
					}
					
					
				
				break;
			case 3:
				/*imprimir los registros*/
				printf("\nLISTADO DE PERSONAS\n");
				aux = inicio; // vamos a recorrer con lista auxiliar
				printf("Listado de trabajadores registrados\n");				
				for(i=0; i < limite; i++){
					while (aux != NULL) {
						printf("RUT: %f\n", aux->rut);
						printf("Nombre: %s\n", aux->nombre);
						printf("Apellido Paterno: %s\n", aux->apelPat);
						printf("Apellido Materno: %s\n", aux->apelMat);
						printf("Edad: %d\n", aux->edad);
						printf("Cargo: %s\n", aux->cargo);
						aux = aux->siguiente;
					}
				
					printf("\n");
				}
				break;
			case 4:
				/*encontrar el elemento central*/
				centro = inicio;
				while(centro != NULL){
					/*variable entero 'contador' usada para contar cuantos nodos
					 * tiene la lista'*/
					if(contador == limite/2){
						/*si el puntero centro*/
						printf("\nRegistro central de la lista:\n");
						printf("RUT: %f\n", centro->rut);
						printf("Nombre: %s\n", centro->nombre);
						printf("Apellido Paterno: %s\n", centro->apelPat);
						printf("Apellido Materno: %s\n", centro->apelMat);
						printf("Edad: %d\n", centro->edad);
						printf("Cargo: %s\n", centro->cargo);
					}
					contador++;
					centro = centro->siguiente;	
				}
				break;
			case 5:
				/*encuentra un registro a travez de la clave (RUT)*/
				/*variable auxiliar que almacenara el rut del trabajador a encontrar*/
				printf("Ingrese el RUT del trabajador a encontrar\n");
				scanf("%f",&ingRut);
				busca = inicio;
				while(busca != NULL){
					if(busca->rut == ingRut){
						printf("\nRegistro encontrado:\n");
						printf("RUT: %f\n", busca->rut);
						printf("Nombre: %s\n", busca->nombre);
						printf("Apellido Paterno: %s\n", busca->apelPat);
						printf("Apellido Materno: %s\n", busca->apelMat);
						printf("Edad: %d\n", busca->edad);
						printf("Cargo: %s\n", busca->cargo);						
						break;
					}
					busca = busca->siguiente;
				}
				break;
		}
	}while(opcion != 0);
	/*al momento de digitar "0", se detendra el ciclo repetitivo e imprimira el*/
	/*siguiente mensaje y se detendra la ejecucion.*/
	return(0);
}
